home *** CD-ROM | disk | FTP | other *** search
/ Mind Run / Mind Run (1991)(Crealude)(FR)(M6)[!][CFI MINDRUM 91148].iso / st48.amos / st48.amosSourceCode
AMOS Source Code  |  2008-12-15  |  41KB  |  1,135 lines

  1. '                            St48                       16  4  91    
  2. Set Buffer 20 : Close Workbench : Close Editor : Randomize Timer
  3. If Exist("CFI:") : Dir$="CFI:" : Else Dir$="df0:" : End If 
  4. '
  5. Dim TPTS(6),ZBUT(28),BBUT(28),ZBI(36),H(28),V(28),CPL(8,3)
  6. Dim XB(2),YB(2),Z(36),CUR(12,9,2),PREF(5),F$(20)
  7. Global TEST,TPTS(),TEMPS,PTS,APTS,NBK,NBI,NB,NBUT,ZBUT(),BBUT(),DIFF
  8. Global BUT$,SG$,SA$,SB$,ZBI(),H(),V(),CPL(),XB(),YB(),Z(),CUR(),HCR,VCR
  9. Global BBOULE,XT,YT,XH,YH,XR,YR,BCUR,HCURS,VCURS,XC,YC,XP,YP,CX,CY
  10. Global BCP,CYCLETAPE,ETAPE,QST,MXETAPE,DIFF,DERANN$,ELTEMPS,GAUCHE
  11. Global DUREE,VITESSE,BZN,MZ,ABANDON,RENOUV$,TSAB,TREN,LANGUE$,TEST$
  12. Global LIGNE,DIT,PREF(),BOUTONS,BOUTONA,BOUTONB,FAITMUSE,FERMEDES,DERBOULE
  13. Global BOULBK,CRSBK,FLCHBK,CERVBK,BASEBLOCK,F$(),DC,DIT8,DIT7,DEGARE$
  14. '''''''''''''''''''''
  15. TEST$="Stress" : TEST=2 : NBUT=1 : ZBUT(NBUT)=BZN+1 : INITEST
  16. '
  17. ''''''''''''''''''''''' Boucle de test ''''''''''''''''''''''''''''''' 
  18. While ETAPE<MXETAPE and Not ABANDON
  19.    PAUSEPOINTS : Exit If Param=3
  20.    VOISTEST : PTS=Max(2,Min(9,2*DIFF-1)) : METPOINTS
  21.    VITESSE=50 : DUREE=$FFFF : For X=1 To 36 : ZBI(X)=0 : Next : VIDCUR[1]
  22.    On QST Proc CARRNB,UNECOL,NBDEUF,CARRBUG,CLAVIER,LETTRDEUF,LETWIN,NBCERCLES
  23.    '''' au joueur ''''''''''''''''''''''''''''''''''''''''''''''''
  24.    '
  25.    BRUIT[0,0,"tiroircaiss2"] : If BOUTONB and(PREF(4)=1) Then PREF(4)=0
  26.    GAUCHE[3,45] : While Chanan(DERBOULE) : Wend 
  27.    Update : Wait Vbl : Update Off 
  28.    For N=1 To NB : Bob N,,,NBK+16 : Wait Vbl : Next : Bob Off : Wait Vbl : AJOUR
  29.    NETTOIE[1] : If PTS<APTS Then DESTROYTOUT
  30.    FAITTOTAL : F=Free
  31. Wend 
  32. RETOUR
  33. '''''''''''''''              Questions de STRESS 
  34. Procedure CARRNB
  35.    BANQBI["F.Chiffr3","F.Rouges1a9"]
  36.    TEMPS[0] : PARLE["Nodigit",1]
  37.    FAITCARRE
  38.    EGAR2[-1]
  39.    N0=2+Rnd(NB-4) : TIRE[0] : For X=1 To NB
  40.    If DIFF<2 : N=X : Else TIRE[NB] : N=Param : End If 
  41.       If N<>N0
  42.          K=N : If DIFF>2 : K=1+Rnd(8) : End If 
  43.          Bob 1,H(K),V(K),N : Wait Vbl 
  44.          EGAR2[5]
  45.          While Timer<DIT+55-10*DIFF : Wend 
  46.    End If : Next : Bob Off 
  47.    FAIREPON[N0,9] : BBUT(1)=N0 : TSAB=Timer+49
  48.    Do 
  49.    REXAMCUR : If Param : Gosub R_CARRNB : Else Exit : End If 
  50.    Loop 
  51.    Pop Proc
  52.    '
  53.    '''''''''''''''''  renouvellement  ''''''''''''''' 
  54.    R_CARRNB:
  55.    EGAR2[5] : N=1+Rnd(8) : Bob 1,H(N),V(N),1+Rnd(NB-1) : Return 
  56. End Proc
  57. Procedure UNECOL
  58.    BANQBI["F.Number1","F.Rouges1a0"]
  59.    PARLE["colour",1]
  60.    H0=375-DC : V0=20 : N=0
  61.    If DIFF<4
  62.       For Y=0 To 2 : H1=H0+26*(Y=1) : X1=2-(Y=1) : For X=0 To X1 : Inc N
  63.       H(N)=H1+52*X : V(N)=V0+43*Y : Next : Next 
  64.    Else 
  65.       V0=4 : For Y=0 To 3 : YB=(Y=1)+(Y=2) : H1=H0+26*YB : X1=2-YB
  66.          For X=0 To X1 : Inc N : H(N)=H1+52*X : V(N)=V0+42*Y
  67.       Next : Next 
  68.    End If : NB=N
  69.    TIRE[0] : For X=1 To NB/2-1 : TIRE[10] : B=Param
  70.    AFFECTE[1,NB,B] : AFFECTE[1,NB,B+10] : Next 
  71.    ' tire le couple d'une seule couleur, or ou bleu 
  72.    TIRE[10] : B=Param+10*Rnd(1) : N0=Param : Rem +Param*(Param=10)
  73.    AFFECTE[1,NB,B] : AFFECTE[1,NB,B]
  74.    Bob Update Off : For N=1 To NB : Bob N,H(N),V(N),ZBI(N) : Next : AJOUR
  75.    Bob Update On 
  76.    EGAR2[-1]
  77.    For X=0 To 6-DIFF : Gosub R_UNECOL
  78.       While Timer<DIT+55-10*DIFF : Wend 
  79.    Next 
  80.    TEMPS[0] : FAIREPON[N0,10] : TSAB=Timer+49
  81.    Do 
  82.    REXAMCUR : If Param : Gosub R_UNECOL : Else Exit : End If 
  83.    Loop 
  84.    Pop Proc
  85.    '
  86.    '''''''''''''''''  renouvellement  ''''''''''''''' 
  87.    R_UNECOL:
  88.    N1=1+Rnd(NB-1) : Repeat : N2=1+Rnd(NB-1) : Until N2<>N1
  89.    A=I Bob(N1) : Bob N1,,,I Bob(N2) : Wait Vbl : Bob N2,,,A : Wait Vbl 
  90.    EGAR2[5] : Return 
  91. End Proc
  92. Procedure NBDEUF
  93.    BANQBI["F.green","F.Rouges1a9"]
  94.    TEMPS[0] : PARLE["Digitwice",1]
  95.    EGAR2[-1]
  96.    FAITCARRE
  97.    ' choisit un nb redoubl∩┐╜ et celui (∩┐╜loign∩┐╜) qu'il remplacera 
  98.    N0=1+Rnd(NB-1) : Repeat : N1=1+Rnd(NB-1) : Until N1<>N0 and Abs(N0-N1)>2
  99.    TIRE[0] : For X=1 To NB
  100.    If DIFF<2 : N=X : Else TIRE[NB] : N=Param : End If 
  101.       P=N : If N=N1 : P=N0 : End If 
  102.       K=N : If DIFF>2 : K=1+Rnd(8) : End If 
  103.       Bob 1,H(K),V(K),P
  104.       EGAR2[5]
  105.       While Timer<DIT+55-10*DIFF : Wend 
  106.    Next : Bob Off 
  107.    FAIREPON[N0,9] : BBUT(1)=N0 : TSAB=Timer+49
  108.    Do 
  109.    REXAMCUR : If Param : Gosub R_NBDEUF : Else Exit : End If 
  110.    Loop 
  111.    Pop Proc
  112.    '
  113.    '''''''''''''''''  renouvellement  ''''''''''''''' 
  114.    R_NBDEUF:
  115.    EGAR2[5] : N=1+Rnd(8) : Bob 1,H(N),V(N),1+Rnd(X-1) : Return 
  116. End Proc
  117. Procedure LETTRDEUF
  118.    BANQBI["F.Reflex5","F.LiliRouge"]
  119.    TEMPS[0] : PARLE["lettertwice",1] : EGAR2[-3]
  120.    FAITCARRE
  121.    ' fait une suite de lettres
  122.    TIRE[0] : For X=1 To NB : TIRE[26] : Z(X-1)=Param : Next 
  123.    For X=NB To 36 : Z(X)=100 : Next 
  124.    ' choisit un nb ∩┐╜ redoubler et celui (∩┐╜loign∩┐╜) qu'il remplacera  
  125.    N0=1+Rnd(NB-1) : Repeat : N1=1+Rnd(NB-1) : Until N1<>N0 and Abs(N0-N1)>2
  126.    NM=Z(N0-1)
  127.    TIRE[0] : For X=1 To NB
  128.       N=X : If DIFF>1 Then TIRE[NB] : N=Param
  129.       P=N : If N=N1 : P=N0 : End If : Bob 1,H(N),V(N),Z(P-1)
  130.       EGAR2[5]
  131.       While Timer<DIT+55-10*DIFF : Wend 
  132.    Next : Bob Off 
  133.    '
  134.    Del Cblock 1 : Get Cblock 1,334-DC,170,300,50
  135.    Sort Z(0) : N0=Match(Z(0),NM) : VIDCUR[1]
  136.    For X=0 To 8 : H=350-DC+25*X : V=170 : Paste Icon H,V,NBI+Z(X)
  137.       CY=0 : CX=X+1 : CUR(CX,CY,0)=H : CUR(CX,CY,1)=163
  138.       CUR(CX,CY,2)=0 : If CX=N0+1 Then CUR(CX,CY,2)=BZN+1
  139.    Next : INICURS[1,0] : VCR=2 : HCR=9
  140.    Del Icon NBI+1 To Length(2)
  141.    TSAB=Timer+49
  142.    Do 
  143.    REXAMCUR : If Param : Gosub R_LETTRDEUF : Else Exit : End If 
  144.    Loop 
  145.    Pop Proc
  146.    '
  147.    R_LETTRDEUF:
  148.    EGAR2[5] : Return 
  149. End Proc
  150. Procedure LETWIN
  151.    BANQBI["F.Lettre1","F.LiliRouge"]
  152.    TEMPS[0] : PARLE["notwin",1] : EGAR2[-3]
  153.    ' fait une suite de lettres : 4 couples et 1 solitaire 
  154.    FAITCARRE : For N=1 To NB : ZBI(N)=0 : Z(N)=0 : Next : TIRE[0]
  155.    For X=1 To 4
  156.       TIRE[26] : I=Param : AFFECTE[1,9,I] : AFFECTE[1,9,I] : Z(X-1)=I
  157.    Next 
  158.    TIRE[26] : N0=Param : AFFECTE[1,9,N0] : Z(4)=N0
  159.    For N=1 To NB : Bob N,H(N),V(N),ZBI(N) : Next 
  160.    '
  161.    For X=0 To 6-DIFF
  162.       Gosub R_LETWIN : While Timer<DIT+55-10*DIFF : Wend 
  163.    Next 
  164.    ' Compl∩┐╜te et affiche les r∩┐╜ponses possibles 
  165.    For X=5 To 8 : TIRE[26] : Z(X)=Param : Next 
  166.    For X=9 To 36 : Z(X)=200 : Next : Rem pour rendre le sort efficace 
  167.    Sort Z(0) : N1=Match(Z(0),N0)
  168.    Del Cblock 1 : Get Cblock 1,334-DC,170,300,50
  169.    For X=0 To 8 : H=350-DC+25*X : V=170 : Paste Icon H,V,NBI+Z(X)
  170.       CY=0 : CX=X+1 : CUR(CX,CY,0)=H : CUR(CX,CY,1)=163
  171.       CUR(CX,CY,2)=0 : If CX=N1+1 Then CUR(CX,CY,2)=BZN+1
  172.    Next : INICURS[1,0] : VCR=2 : HCR=9
  173.    Del Icon NBI+1 To Length(2)
  174.    TSAB=Timer+49
  175.    Do 
  176.    REXAMCUR : If Param : Gosub R_LETWIN : Else Exit : End If 
  177.    Loop 
  178.    Pop Proc
  179.    '
  180.    R_LETWIN:
  181.    EGAR2[5]
  182.    N1=Rnd(8)+1 : Repeat : N2=Rnd(8)+1 : Until Abs(N2-N1)>2
  183.    Swap ZBI(N1),ZBI(N2) : Bob N1,,,ZBI(N1) : Bob N2,,,ZBI(N2) : Return 
  184. End Proc
  185. Procedure NBCERCLES
  186.    TEMPS[0]
  187.    Erase 2 : Load "BanqueI/F.cercles.abk",2 : NBD=Length(2)-1
  188.    PARLE["circles",1] : EGAR2[-2]
  189.    NB=9+DIFF+Rnd(DIFF)
  190.    Get Block BASEBLOCK+1,375-DC,10,200,170,1
  191.    H0=375-DC : V0=10 : N0=1+Min(7,Rnd(2*DIFF)) : C=80
  192.    For N=1 To N0+11 : Paste Icon H0+Rnd(C+20),V0+Rnd(C),1+Rnd(NBD) : Next 
  193.    For X=1 To 8-DIFF
  194.       EGAR2[4]
  195.       While Timer<DIT+55-10*DIFF : Wend 
  196.    Next 
  197.    ABLOC[BASEBLOCK+1] : Del Block BASEBLOCK+1
  198.    Erase 2 : Load "banqueI/F.NB12a19.abk",2
  199.    ' mettre des nombres entre 12 et 19 et ajuster N0
  200.    Del Cblock 1 : Get Cblock 1,328-DC,172,306,30 : Paste Icon 345-DC,172,1
  201.    BANQBI["",""]
  202.    CY=0 : For CX=1 To 8 : CUR(CX,CY,0)=340-DC+(CX-1)*35 : CUR(CX,CY,1)=163
  203.       CUR(CX,CY,2)=0 : If CX=N0 Then CUR(CX,CY,2)=BZN+1
  204.    Next 
  205.    INICURS[1,0] : VCR=2 : HCR=8
  206.    'BBUT(1)=N0
  207.    TSAB=Timer+49
  208.    Do 
  209.    REXAMCUR : If Param : Gosub R_NBCERCLES : Else Exit : End If 
  210.    Loop 
  211.    Pop Proc
  212.    '  
  213.    R_NBCERCLES:
  214.    EGAR2[4] : Return 
  215. End Proc
  216. Procedure CLAVIER
  217.    Erase 1 : Erase 2
  218.    Del Cblock 1 : Get Cblock 1,346-DC,36,268,148
  219.    Load "BanqueI/F.clavier.abk" : Paste Icon 347-DC,37,1
  220.    BANQBI["","F.Touches"]
  221.    N=0 : H0=351-DC : V0=88 : VIDCUR[1]
  222.    S$="AZERTYUIOPQSDFGHJKL\WXCVBNM"
  223.    'S$="ABCDEFGHIJKLMNOPQRSTUVWXYZ\"
  224.    For CY=0 To 2 : For X=0 To 9-CY : Inc N
  225.          H(N)=H0+25*X+7*CY : V(N)=V0+25*CY
  226.          ZBI(N)=NBI+N : Paste Icon H(N),V(N),NBI+N : Z(N)=Asc(Mid$(S$,N,1))
  227.          CX=X+1 : CUR(CX,CY,0)=H(N)-5 : CUR(CX,CY,1)=V(N)-5
  228.          CUR(CX,CY,2)=BZN+N
  229.    Next : Next : NB=N : ZBI(0)=NBI+28 : VCR=2 : HCR=10 : INICURS[1,0]
  230.    TEMPS[0] : PARLE["type",0]
  231.    CL: Data "TITANIC","KRAKATOA","BERMUDA","POMPEI","WATERLOO","ATTILA"
  232.    Data "VESUVIO"
  233.    Restore CL : For X=0 To Rnd(6) : Read BUT$ : Next : L=Len(BUT$)
  234.    For Y=0 To 3 : For X=1 To L : M=Asc(Mid$(BUT$,X,1)) : N=0
  235.          Repeat : Inc N : Until Z(N)=M : Paste Icon 367-DC+X*20,47,ZBI(N)+28
  236.          If X>1 : Paste Icon 367-DC+20*(X-1),47,ZBI(N0) : End If 
  237.    N0=N : Next : Paste Icon 367-DC+20*(X-1),47,ZBI(N0) : Next 
  238.    For X=0 To 8 : Paste Icon 386-DC+20*X,47,ZBI(0) : Next 
  239.    While Timer<DIT : Wend 
  240.    EGAR2[-3]
  241.    VITESSE=50 : SG$="" : TSAB=Timer+49
  242.    Do 
  243.       FAIPREUVECUR : Exit If Param=0
  244.       On Param Gosub R_CLAVIER,F_CLAVIER
  245.    Loop 
  246.    Pop Proc
  247.    '
  248.    F_CLAVIER:
  249.    TSAB0=TSAB-Timer : A=MZ-BZN : L=Len(SG$)
  250.    Paste Icon H(A),V(A),ZBI(A)+28 : BRUITB[3]
  251.    If(Z(A)=92) and(L>0)
  252.       SG$=Left$(SG$,L-1) : Paste Icon 386-DC+20*(L-1),47,ZBI(0)
  253.    End If 
  254.    If(Z(A)<92) and(L<9)
  255.       SG$=SG$+Chr$(Z(A)) : Paste Icon 367-DC+20*(L+1),47,ZBI(A)
  256.    End If 
  257.    While Mouse Key : Wend : Paste Icon H(A),V(A),ZBI(A)
  258.    TSAB=TSAB0+Timer : Return 
  259.    '
  260.    R_CLAVIER:
  261.    EGAR2[5]
  262.    N1=Rnd(NB-1)+1 : Repeat : N2=Rnd(NB-1)+1 : Until Abs(N2-N1)>2
  263.    Swap ZBI(N1),ZBI(N2) : Swap Z(N1),Z(N2)
  264.    Paste Icon H(N1),V(N1),ZBI(N1) : Paste Icon H(N2),V(N2),ZBI(N2)
  265.    Return 
  266. End Proc
  267. Procedure CARRBUG
  268.    Del Cblock 1 : Get Cblock 1,346-DC,10,200,172
  269.    Get Cblock 2,536-DC,108,84,78
  270.    BANQBI["F.CoccB","F.CoccI"] : Paste Icon 347-DC,10,Length(2)
  271.    H0=537-DC : V0=110 : F=0 : VIDCUR[1]
  272.    For CY=0 To 1 : For X=0 To 1 : Inc F : H(F)=H0+40*X : V(F)=V0+40*CY
  273.          ZBI(F)=NBI+F+1 : Z(F)=F : Paste Icon H(F),V(F),ZBI(F)
  274.          CX=X+1 : CUR(CX,CY,0)=H(F) : CUR(CX,CY,1)=V(F)
  275.          CUR(CX,CY,2)=BZN+F
  276.    Next : Next : HCR=2 : VCR=2
  277.    ' H() et V() : 1 2 3 4  pour les fl∩┐╜ches, 10 et plus pour le bug 
  278.    H(10)=367-DC : V(10)=25 : H(11)=0 : V(11)=3
  279.    '
  280.    H(12)=1+Rnd(1) : V(12)=1+Rnd(1)
  281.    Paste Icon H(10)+33*H(12),V(10)+33*V(12),Length(2)-2
  282.    If DIFF>3
  283.       Repeat : H=Rnd(2) : V=Rnd(3)
  284.       Until((H<>H(12))+(V<>V(12)))*((H<>4)+(V<>0))*((H<>0)+(V<>4))
  285.       H(13)=H : V(13)=V
  286.       Paste Icon H(10)+33*H,V(10)+33*V,Length(2)-2
  287.    End If 
  288.    '
  289.    H(14)=4 : V(14)=0 : Paste Icon H(10)+33*H(14),V(10)+33*V(14),Length(2)-1
  290.    Bob 1,H(10)+33*H(11),V(10)+33*V(11),1
  291.    PARLE["bug",1] : INICURS[2,0]
  292.    EGAR2[-4] : Del Icon Length(2)-2 To Length(2)
  293.    VITESSE=50-5*DIFF : BUT$="Cebon" : SG$=""
  294.    TSAB=Timer+49
  295.    Erase 8 : Reserve As Chip Work 8,10030
  296.    Bload "MRbruits/Crecelle0",Start(8)
  297.    Do 
  298.       FAIPREUVECUR : Exit If Param=0
  299.       On Param Gosub R_CARRBUG,F_CARRBUG
  300.    Loop 
  301.    VIDCUR[1] : Bob BCUR,CUR(0,0,0),CUR(0,0,1), : NETTOIE[2]
  302.    Del Cblock 2 : Wait 30 : Volume %101,0 : Erase 8
  303.    Pop Proc
  304.    '
  305.    F_CARRBUG:
  306.    TSAB0=TSAB-Timer : FL=MZ-BZN : F=Z(FL)
  307.    Paste Icon H(FL),V(FL),ZBI(FL)+8 : BRUITB[3]
  308.    H=H(11)-(F=4)+(F=3) : V=V(11)-(F=2)+(F=1)
  309.    If(H=H(14)) and(V=V(14)) Then SG$="Cebon"
  310.    A=(H>-1) and(H<4) and(V>-1) and(V<4) and((H<>H(12) or V<>V(12)))
  311.    If DIFF>3 Then A=A and(H<>H(13) or V<>V(13))
  312.    If((H=H(14)) and(V=V(14))) or A
  313.       While Timer<DIT8 : Wend 
  314.       Sam Raw %1010,Start(8),10024,20000 : DIT8=Timer+27
  315.       Channel 1 To Bob 1 : Bob 1,H(10)+33*H(11),V(10)+33*V(11),F
  316.       Amal 1,"A 5,(R0,2)(R1,2);M R2,R3,20" : Amreg(1,0)=F+4 : Amreg(1,1)=F
  317.       Amreg(1,2)=33*(H-H(11)) : Amreg(1,3)=33*(V-V(11))
  318.       Amal On 1 : H(11)=H : V(11)=V
  319.    Else 
  320.       Dec PTS : METPOINTS : DESTROYPT
  321.    End If 
  322.    While Mouse Key : Wend : Paste Icon H(FL),V(FL),ZBI(FL)
  323.    TSAB=TSAB0+Timer : Return 
  324.    '
  325.    R_CARRBUG:
  326.    EGAR2[4]
  327.    N1=Rnd(3)+1 : Repeat : N2=Rnd(3)+1 : Until N2<>N1
  328.    Swap ZBI(N1),ZBI(N2) : Swap Z(N1),Z(N2)
  329.    Paste Icon H(N1),V(N1),ZBI(N1) : Paste Icon H(N2),V(N2),ZBI(N2)
  330.    Return 
  331. End Proc
  332. '
  333. Procedure FAITCARRE
  334.    NB=9 : H0=375-DC : V0=10 : For Y=0 To 2 : For X=0 To 2 : Inc N
  335.          H(N)=H0+52*X : V(N)=V0+52*Y
  336.    Next : Next 
  337. End Proc
  338. Procedure EGAR2[NS]
  339.    If NS<0 Then While Timer<DIT : Wend 
  340.    If NS=-1 : Rem nombres de 1∩┐╜9 
  341.       S$=Mid$("FM",1+Rnd(1),1)+Str$(1+Rnd(1))-" "
  342.       DEGARE$="Egare/chif"+LANGUE$+S$+".sbk" : Load DEGARE$,6
  343.    Pop Proc : End If 
  344.    If NS=-2 : Rem Nombresm de 11 ∩┐╜ 20
  345.       S$=Mid$("FM",1+Rnd(1),1)+Str$(3+Rnd(1))-" "
  346.       DEGARE$="Egare/chif"+LANGUE$+S$+".sbk" : Load DEGARE$,6
  347.    Pop Proc : End If 
  348.    If NS=-3 : Rem lettres
  349.       S$=Mid$("FM",1+Rnd(1),1)+Str$(1+Rnd(4))-" "
  350.       DEGARE$="Egare/Lett"+LANGUE$+S$+".sbk" : Load DEGARE$,6
  351.    Pop Proc : End If 
  352.    If NS=-4 : Rem Directions 
  353.       S$=Mid$("FM",1+Rnd(1),1)
  354.       DEGARE$="Egare/Direct"+LANGUE$+S$+".sbk" : Load DEGARE$,6
  355.    Pop Proc : End If 
  356.    S0=Start(6) : X=1+Rnd(NS-1) : S=Leek(S0+8*X) : L=Leek(S0+8*X+4)
  357.    Sam Raw %101,S+S0+105,L-105,20000 : DIT=Timer+L/400
  358. End Proc
  359. Procedure AIDE
  360.    While Timer<DIT : Wend 
  361.    PARLE[DERANN$,1] : While Timer<DIT : Wend : Wait 50 : Load DEGARE$,6
  362. End Proc
  363. Procedure FAIREPON[N0,NTOT]
  364.    Del Cblock 1 : Get Cblock 1,334-DC,175,300,50
  365.    Paste Icon 350-DC,175,NBI+1 : Del Icon NBI+1
  366.    CY=0 : For CX=1 To NTOT : CUR(CX,CY,0)=320-DC+25*CX : CUR(CX,CY,1)=163
  367.       CUR(CX,CY,2)=0 : If CX=N0 Then CUR(CX,CY,2)=BZN+1
  368.    Next 
  369.    INICURS[1,0] : VCR=2 : HCR=NTOT
  370. End Proc
  371. Procedure FAIPREUVECUR
  372.    TREN=Timer+VITESSE : OPTION=0
  373.    Do 
  374.       If SG$=BUT$ Then BRUITB[1] : While Timer<DIT7 : Wend : Exit 
  375.       CURSEUR[1]
  376.       Exit If PTS<1
  377.       If(PTS<1) or(DUREE<1) Then OPTION=0 : Exit 
  378.       If BOUTONB Then MZ=1
  379.       If Not(BOUTONS) Then OPTION=1 : Exit : Rem renouvelle 
  380.       If(MZ=1) or BOUTONB Then CLIQUE[13] : PTS=0 : Exit : Rem Puis destroytout 
  381.       If MZ=2 Then CLIQUE[14] : AIDE
  382.       If MZ=3 Then CLIQUE[15] : PTS=0 : ABANDON=True : Exit 
  383.       If MZ>BZN Then BRUITB[100] : OPTION=2 : Exit 1
  384.    Loop 
  385. End Proc[OPTION]
  386. Procedure REXAMCUR
  387.    TREN=Timer+VITESSE : RENOU=False
  388.    Do 
  389.       CURSEUR[1] : Exit If PTS<1
  390.       If BOUTONB Then MZ=1
  391.       If Not(BOUTONS) Then RENOU=(PTS>0) : Exit 
  392.       If MZ=1 Then CLIQUE[13] : PTS=0 : Exit : Rem Destroytout  
  393.       If MZ=2
  394.          CLIQUE[14] : AIDE : INICURS[CX,CY] : BOUTONS=False
  395.       End If 
  396.       If MZ=3 Then CLIQUE[15] : PTS=0 : ABANDON=True : Exit 
  397.       Exit If PTS<1
  398.       If MZ=BZN+1 and BOUTONS
  399.          BRUITB[1] : While Timer<DIT7 : Wend : Exit 
  400.       Else 
  401.          TSAB0=TSAB-Timer : TREN0=TREN-Timer
  402.          Dec PTS : METPOINTS : DESTROYPT : RENOU=False
  403.          If DIFF>1 : Dec PTS : METPOINTS : DESTROYPT : Exit If PTS<1 : End If 
  404.          If DIFF>3 : Dec PTS : METPOINTS : DESTROYPT : Exit If PTS<1 : End If 
  405.          TSAB=TSAB0+Timer : TREN=TREN0+Timer : While Mouse Key : Wend 
  406.          If PTS<1
  407.             Exit 
  408.          Else 
  409.             'While Timer<DIT7 : Wend 
  410.          End If 
  411.       End If 
  412.       If Timer>Max(DIT,TREN) Then RENOU=True : Exit 
  413.    Loop 
  414. End Proc[RENOU]
  415. Procedure ALEAMUS[S]
  416.    If S=0 Then Volume %101,0 : FAITMUSE=0 : Pop Proc
  417.    While Timer<DIT : Wend 
  418.    FAITMUSE=1 : A$="mrsons/stressons/glisstress1" : Bload A$,Start(6)
  419.    Add DIT,150
  420. End Proc
  421. Procedure MUSE
  422.    If Length(6)<1 Then Reserve As Chip Work 6,$FFFF
  423.    If PREF(5)=1 Then Pop Proc
  424.    If FAITMUSE=0 Then Pop Proc
  425.    Data 196,207.65,220,233.08,246.94
  426.    Data 261.63,277.18,293.66,311.13,329.63,349.23,370,392,415.3
  427.    Data 440,466.16,493.88,523.25
  428.    N=1+Rnd(16) : Restore : For X=1 To N : Read F : Next : F=20000/392*F
  429.    L=21576 : VOIX=Rnd(1)+4*Rnd(1) : Volume VOIX,20+Rnd(13)
  430.    Sam Raw VOIX,Start(6)+104,L,F : DIT=Timer+50*L/F+Rnd(60)
  431. End Proc
  432. '  
  433. '
  434. '                          PROCEDURES GENERALES  
  435. '
  436. Procedure INITEST
  437.    DC=0 : Rem nouvelles coordonn∩┐╜es / petit ∩┐╜cran
  438.    If Screen=7 : PRENDVAR
  439.    Else Load Iff "decors/"+Mid$(TEST$,1,2),0 : Double Buffer 
  440.    LANGUE$="Ang" : PREF(1)=1 : PREF(3)=2 : End If 
  441.    Colour 0,0 : Colour Back 0 : Wait Vbl : View 
  442.    Hide On : Limit Mouse : MXETAPE=40 : CYCLETAPE=8 : GAUCHE=True : Curs Off 
  443.    XB(0)=280 : YB(0)=46 : Rem Suite
  444.    XB(1)=295 : YB(1)=63 : Rem Help 
  445.    XB(2)=278 : YB(2)=79 : Rem Encore 
  446.    BCUR=63 : Rem N∩┐╜ de bob du curseur 
  447.    XP=282 : YP=4 : APTS=0 : BBOULE=15 : Rem bob des points sur le boulier
  448.    XC=253 : YC=177 : Rem compteur d'∩┐╜tapes
  449.    XT=209 : YT=24 : Rem compteur du total
  450.    BOULBK=1 : CRSBK=2 : FLCHBK=3 : CERVBK=4 : BASEBLOCK=4 : Rem Blocks de base 
  451.    BZN=8
  452.    For X=1 To 15 : Erase X : Next 
  453.    Erase 7 : Reserve As Chip Work 7,7520 : Load "MRbruits/Brt0.sbk",7
  454.    '
  455.    BANQBI["",""]
  456.    '
  457.    Reserve Zone 35 : Limit Mouse 
  458.    ETAPE=0 : QST=ETAPE : DIFF=1 : ELTEMPS=100
  459.    '
  460.    ' Boulier des points par ∩┐╜cran    (Block BOULBK pour toutes les boules)    
  461.    Get Block BOULBK,25+XP-DC,5+YP,10,10,1
  462.    '
  463.    ' Compteur d'∩┐╜tapes     (Block CRSBK pour le curseur, initialis∩┐╜ ici)  
  464.    HCURS=XC-DC : VCURS=YC-3*ETAPE : Get Block CRSBK,HCURS,VCURS,22,17,1
  465.    Paste Icon HCURS,VCURS,12
  466.    '
  467.    ' Fl∩┐╜ches  (block FLCHBK, actualis∩┐╜ chaque fois) 
  468.    'For I=0 To 2 : Set Zone I+1,XB(I)+7-DC,YB(I)+7 To XB(I)+19-DC,YB(I)+19
  469.    'Next  
  470.    '
  471.    ' Difficult∩┐╜ (Block CERVBK actualis∩┐╜ chaque fois, initialis∩┐╜ ici)
  472.    AZDIF: Data 284,172,311,183
  473.    Data 285,161,314,172
  474.    Data 284,149,317,161
  475.    Data 285,133,321,149
  476.    Data 285,113,326,133
  477.    Restore AZDIF : Read H,V,H1,V1 : Add H,-DC : Add H1,-DC
  478.    Get Block CERVBK,H,V,H1-H,V1-V,1 : DIFF[0,DIFF]
  479.    Restore AZDIF
  480.    'For Y=4 To 8 : Read H,V,H1,V1 : Set Zone Y,H,V To H1,V1 : Next  
  481.    '
  482.    ' Plage de travail (Block 1, de type "c")
  483.    'Get Cblock 1,334,0,300,290
  484.    Get Cblock 1,0,0,8,2
  485.    TEMPS[0] : PARLE["Start",2]
  486. End Proc
  487. Procedure PAUSEPOINTS
  488.    BZDIF: Data 284,172,311,183,285,161,314,172,284,149,317,161
  489.    Data 285,133,321,149,285,113,326,133
  490.    ALEAMUS[1] : A=0 : CX=1 : CY=0
  491.    If(PREF(4)=0) or(ETAPE<1)
  492.       Repeat 
  493.          VIDCUR[0]
  494.          For I=0 To 2
  495.             CUR(1,I,0)=XB(I)-DC : CUR(1,I,1)=YB(I) : CUR(1,I,2)=I+1
  496.          Next 
  497.          Restore BZDIF : For Y=4 To 8
  498.             Read H,V,H1,V1 : Add H,-DC : Add H1,-DC
  499.          CUR(1,11-Y,0)=H : CUR(1,11-Y,1)=V : CUR(1,Y-1,2)=12-Y : Next 
  500.          CUR(0,2,0)=194-DC : CUR(0,2,1)=85 : CUR(0,2,2)=9
  501.          INICURS[CX,CY] : HCR=1 : VCR=7
  502.          CURSEUR[0] : A=Param : If BOUTONB : MZ=3 : End If 
  503.          If(A=27) or(MZ=2) : Rem pr∩┐╜sentations
  504.             ALEAMUS[0]
  505.             If MZ=2 : CLIQUE[14] : CX=1 : CY=1 : INICURS[CX,CY] : End If 
  506.             DEPLACE: Data 1,0,1,1,1,2,0,2,1,2,1,1,1,0,1,1,1,2,1,3
  507.             Bob BCUR,CUR(1,0,0),CUR(1,0,1), : Wait Vbl : PARLE["Arrows",2]
  508.             Restore DEPLACE : For X=1 To 10
  509.                Read H,V
  510.                BRUITB[3] : Bob BCUR,CUR(H,V,0),CUR(H,V,1), : Wait Vbl 
  511.                TEMPS=Timer+50
  512.                Repeat : K1=Mouse Key : Until Timer>TEMPS or K1>0
  513.                Exit If K1
  514.             Next 
  515.             If K1<1
  516.                PRESENTE: Data 1,0,"Advance",1,1,"Help",1,2,"Main"
  517.                Data 0,2,"Preferences"
  518.                Wait 50 : PARLE["select",2] : Wait 250 : Restore PRESENTE
  519.                For X=1 To 4
  520.                   Read H,V,A$ : Bob BCUR,CUR(H,V,0),CUR(H,V,1), : Wait Vbl 
  521.                   PARLE[A$,2]
  522.                   T=Timer+250 : Repeat : K2=Mouse Key : Until Timer>T or K2>0
  523.                   Exit If K2
  524.                Next 
  525.                If K2<1
  526.                   PARLE["Level",2] : Rem Amal Off 15 : Wait Vbl 
  527.                   For X=1 To 5 : Bob BCUR,CUR(1,8-X,0),CUR(1,8-X,1), : Wait Vbl 
  528.                      T=Timer+50
  529.                      Repeat : K3=Mouse Key : Until Timer>T or K3>0
  530.                      Exit If K3
  531.                      Bob BCUR,,,NBK+16 : Wait Vbl : Rem AJOUR : DIFF[X]
  532.                      'Bob BCUR,,,NBK+17 : Wait Vbl : Wait 40
  533.                   Next 
  534.                   If K3<1
  535.                      T=Timer+100
  536.                      Repeat : K=Mouse Key : Until Timer>T or K>0
  537.                   End If 
  538.                End If 
  539.                'DIFF[1] 
  540.             End If 
  541.             MZ=0 : INICURS[1,0] : ALEAMUS[1] : Wait 50
  542.          End If 
  543.          If A=43
  544.             ETAPE=Min(39,ETAPE+1) : ETAPE[ETAPE] : Inc QST : MZ=0
  545.          End If 
  546.          If A=45
  547.             ETAPE=Max(0,ETAPE-1) : ETAPE[ETAPE] : QST=Max(0,QST-1) : MZ=0
  548.          End If 
  549.          If 3<MZ and MZ<9
  550.             BRUITB[100] : Amal Off 15 : Bob BCUR,,,NBK+16 : AJOUR : DIFF[DIFF,MZ-3]
  551.          End If 
  552.          If MZ=9 : ALEAMUS[0] : BRUITB[50]
  553.             P=1 : If Screen=3 : P=2 : End If : PREFERENCES[P] : ALEAMUS[1]
  554.             MZ=0
  555.          End If 
  556.       Until(MZ=1) or(MZ=3) or BOUTONB
  557.    Else 
  558.       MZ=1
  559.    End If : ALEAMUS[0]
  560.    Wait 1+50*PREF(4) : Rem If(PREF(4)=1) and(ETAPE>0) Then MZ=1 
  561.    If MZ=1
  562.       ALEAMUS[0] : DIT=0
  563.       CLIQUE[13] : Inc ETAPE : Inc QST
  564.       If QST>CYCLETAPE
  565.          A=DIFF : QST=1 : DIFF=Min(DIFF+1,5) : DIFF[A,DIFF]
  566.       End If 
  567.       ETAPE[ETAPE] : TEMPS[0]
  568.    End If 
  569.    If(MZ=3) or BOUTONB Then CLIQUE[15]
  570.    Amal Off 15 : Bob Off BCUR : Bob Clear : AJOUR
  571. End Proc[MZ]
  572. Procedure INICURS[CX,CY]
  573.    Limit Mouse 
  574.    If Chanan(15) Then Bob BCUR,CUR(CX,CY,0),CUR(CX,CY,1), : Pop Proc
  575.    Channel 15 To Bob BCUR : Bob BCUR,CUR(CX,CY,0),CUR(CX,CY,1),NBK+17
  576.    Wait Vbl : Amal 15,"A 0,(R1,46)(R2,4)"
  577.    Amreg(15,1)=NBK+17 : Amreg(15,2)=NBK+18 : Amal On 15 : Clear Key 
  578. End Proc
  579. Procedure CURSEUR[C]
  580.    BOUTONA=False : BOUTONB=False : BOUTONS=False
  581.    Clear Key 
  582.    Repeat 
  583.       Repeat : T1=Timer+50
  584.          For X=1 To 10
  585.             X=X Mouse : Y=Y Mouse : Wait 3 : U=X Mouse : V=Y Mouse
  586.             Exit If X=U and Y=V
  587.          Next 
  588.          X Mouse=150 : Y Mouse=100 : MX0=X Mouse : MY0=Y Mouse : DM=0
  589.          Repeat 
  590.             If Timer>DIT Then MUSE
  591.             If C=1 : Rem En cours de question 
  592.                If Timer>TSAB : TEMPS[1] : TSAB=Timer+49 : End If 
  593.                If(PTS<1) or(DUREE<1) : MZ=0 : Exit 3 : End If 
  594.                If Timer>TREN : A=0 : Exit 3 : End If 
  595.             End If 
  596.             If C=2 : Rem En menu principal
  597.                If Timer>T1
  598.                   Restore "ETOILE"
  599.                   For X=1 To 1+Rnd(21) : Read A,B : Next 
  600.                   Bob 3,A,B, : Wait Vbl 
  601.                   T2=Timer+10+Rnd(20) : T1=T2+200
  602.                End If 
  603.                If Timer>T2
  604.                   Bob 3,-20,, : T1=Timer+50+50*Rnd(2) : T2=T1+200
  605.                End If 
  606.             End If 
  607.             MX=X Mouse : MY=Y Mouse : A$=Inkey$
  608.          Until A$<>"" or Mouse Key or Abs(MX0-MX)>DM or Abs(MY0-MY)>DM
  609.          K=Mouse Key : R=Asc(A$)
  610.          A=-28*(MX-MX0>DM)-29*(MX0-MX>DM)-30*(MY0-MY>DM)-31*(MY-MY0>DM)
  611.          If(R>27) and(R<32) Then A=R
  612.          X=CX : Y=CY
  613.          If(A=28) Then Add X,1
  614.          If(A=29) Then Add X,-1
  615.          If(A=30) Then Add Y,-1
  616.          If(A=31) Then Add Y,1
  617.       Until((X<0)+(Y<0)+(X>HCR)+(Y>VCR)=0)
  618.       If(X<>CX) or(Y<>CY)
  619.          If(CUR(X,Y,0)=0) and(CUR(X,Y,1)=0)
  620.             If(A=28) or(A=29)
  621.                Repeat : Add Y,-1,0 To VCR
  622.                Until((CUR(X,Y,0)<>0) or(CUR(X,Y,1)<>0))
  623.             End If 
  624.             If(A=30) or(A=31)
  625.                Repeat : Add X,1,0 To HCR
  626.                Until((CUR(X,Y,0)<>0) or(CUR(X,Y,1)<>0))
  627.             End If 
  628.          End If 
  629.          BRUITB[3] : CX=X : CY=Y : Bob BCUR,CUR(CX,CY,0),CUR(CX,CY,1),
  630.          Exit If C=2
  631.       End If 
  632.    Until(K>0)+(R=43)+(R=45)+(R=27)+(R=13)
  633.    MZ=CUR(CX,CY,2)
  634.    BOUTONS=(K>0)+(R=13) : BOUTONA=(K=1)+(K=3)+(R=13) : BOUTONB=(K>1)
  635. End Proc[R]
  636. Procedure VIDCUR[A]
  637.    For X=0 To 12 : For Y=0 To 9 : For Z=0 To 2 : CUR(X,Y,Z)=0
  638.    Next : Next : Next 
  639.    If A=1 : Rem situe les trois fl∩┐╜ches
  640.       For I=0 To 2 : CUR(0,I,0)=XB(I)-DC : CUR(0,I,1)=YB(I)
  641.       CUR(0,I,2)=I+1 : Next 
  642.       HCR=1 : VCR=2
  643.    End If 
  644. End Proc
  645. Procedure PARLE[A$,T]
  646.    If Length(6)<1 Then Reserve As Chip Work 6,$FFFF
  647.    If PREF(1)<1 Then Pop Proc
  648.    While Timer<DIT : Wend 
  649.    Volume %101,63 : DERANN$=A$
  650.    T$=TEST$ : If T=2 Then T$="General"
  651.    SEX$=Mid$("FM",1+Rnd(1),1) : If Instr("JapIta",LANGUE$) Then SEX$="F"
  652.    F$="Paroles/"+T$+"/"+LANGUE$+SEX$+"/"+A$
  653.    If Not Exist(F$) Then Pop Proc
  654.    Open In 1,F$ : L=Lof(1) : Close 1
  655.    If L>$FFFF Then Pop Proc
  656.    S6=Start(6) : Bload F$,S6 : Volume %101,63 : Sam Raw %101,104+S6,L,20000
  657.    DIT=Timer+(L/400)+20
  658.    If Exist(F$+Chr$(50))
  659.       While Timer<DIT : Wend : F$=F$+Chr$(50)
  660.       Open In 1,F$ : L=Lof(1) : Close 1
  661.       If L>64000 : Pop Proc : End If 
  662.       Bload F$,S6 : Sam Raw %101,104+S6,L,20000
  663.       DIT=Timer+(L/400)+20
  664.    End If 
  665.    If T=1 Then While Timer<DIT : Wend 
  666. End Proc
  667. Procedure BRUIT[F,V,A$]
  668.    If Length(6)<1 Then Reserve As Chip Work 6,$FFFF
  669.    If PREF(2) Then Pop Proc
  670.    While Timer<DIT : Wend 
  671.    S=20000 : If F<>0 Then S=1000*F
  672.    If L>65430 Then Pop Proc
  673.    Open In 1,"MRbruits/"+A$ : L=Lof(1) : Close 1
  674.    Bload "MRbruits/"+A$,Start(6)
  675.    Volume %1010,63 : If V<>0 Then Volume %1010,V
  676.    Sam Raw %1010,Start(6)+104,L,S : DIT=Timer+L/400
  677. End Proc
  678. Procedure BRUITB[N]
  679.    F=20000 : If N=100 Then N=3 : F=30000
  680.    If N=50 Then N=3 : F=10000
  681.    S0=Start(7) : S=Leek(S0+8*N) : L=Leek(S0+8*N+4)
  682.    Volume %1010,63 : Sam Raw %1010,S+S0+105,L-105,F : DIT7=Timer+L/400
  683. End Proc
  684. Procedure TEMPS[T]
  685.    ' Mettre sur la voix 
  686. If T=0 : TEMPS=DIFF-1 : Else BRUITB[2] : End If 
  687.    Inc TEMPS
  688.    If TEMPS>10
  689.       Dec PTS : METPOINTS : DESTROYPT : Dec DUREE
  690.       If(DUREE<1) or(PTS<1) : Pop Proc : End If 
  691.       TEMPS=DIFF
  692.    End If 
  693.    Paste Icon 578-DC,5,TEMPS+15 : Wait Vbl 
  694. End Proc
  695. Procedure CLIQUE[I]
  696.    Amal Off 1 : Bob Off BCUR : Bob Clear : AJOUR
  697.    BRUITB[50] : H=XB(I-13)-DC : V=YB(I-13)
  698.    Get Block FLCHBK,H,V,40,40,1 : Paste Icon H,V,I : While Mouse Key : Wend 
  699.    ABLOC[FLCHBK]
  700. End Proc
  701. Procedure ETAPE[ETAPE]
  702.    Update : Update Off : Wait Vbl 
  703.    Bob Clear : Put Block CRSBK,XC-DC, : Bob Draw : Screen Swap : Wait Vbl 
  704.    Bob Clear : Put Block CRSBK,XC-DC, : Bob Draw : Screen Swap : Wait Vbl 
  705.    Update On 
  706.    HCURS=XC-DC : VCURS=YC-3*ETAPE
  707.    Get Block CRSBK,HCURS,VCURS,22,17,1 : Paste Icon HCURS,VCURS,12
  708. End Proc
  709. Procedure DIFF[I1,I2]
  710.    ZD1: Data 284,172,311,183
  711.    ZD2: Data 285,161,314,172
  712.    ZD3: Data 284,149,317,161
  713.    ZD4: Data 285,133,321,149
  714.    ZD5: Data 285,113,326,133
  715.    If I1>0
  716.       Restore "ZD"+Str$(I1)-" " : Read H : Add H,-DC
  717.       Update : Update Off : Wait Vbl 
  718.       Bob Clear : Put Block CERVBK,H, : Bob Draw : Screen Swap : Wait Vbl 
  719.       Bob Clear : Put Block CERVBK,H, : Bob Draw : Screen Swap : Wait Vbl 
  720.       Update On 
  721.    End If 
  722.    I=Min(I2,5) : Restore "ZD"+Str$(I)-" " : Read H,V,H1,V1
  723.    Add H,-DC : Add H1,-DC
  724.    Get Block CERVBK,H,V,H1-H,V1-V,1 : Paste Icon H,V,6+I
  725.    DIFF=I
  726. End Proc
  727. Procedure FAITTOTAL
  728.    I=PTS : B=BBOULE
  729.    PT1: Data 25,5
  730.    PT2: Data 14,5
  731.    PT3: Data 3,5
  732.    PT4: Data 25,16
  733.    PT5: Data 14,16
  734.    PT6: Data 3,16
  735.    PT7: Data 25,27
  736.    PT8: Data 14,27
  737.    PT9: Data 3,27
  738.    If PTS>0
  739.       Amal Off : Bob Off : AJOUR
  740.       A$="A 1,(R2,7)(R3,1)(R4,1);M R0,0,5;M 0,R1,3;M -4,0,4"
  741.       For X=I To 1 Step -1
  742.          Dec PTS : METPOINTS : Inc TPTS(TEST)
  743.          Restore "PT"+Str$(PTS+1)-" " : Read H,V : H=XP+H-DC : V=YP+V
  744.          Dec B : Channel B To Bob B : Bob B,H,V,NBK+1 : Wait Vbl 
  745.          Amal B,A$
  746.          Amreg(B,0)=XT+55-H-DC : Amreg(B,1)=YT+4-V : Amreg(B,2)=NBK+1
  747.          Amreg(B,3)=NBK+15 : Amreg(B,4)=NBK+16
  748.          Amal On B
  749.          If X=I : Sam Loop On : BRUIT[0,0,"Bobloc"] : End If 
  750.          METTOTAL["+",TPTS(TEST),XT,YT] : Wait Vbl 
  751.       Next 
  752.       While Chanmv(B) : Wend 
  753.       Bob Off : Bob Clear : Sam Loop Off 
  754.    End If 
  755. End Proc
  756. Procedure METTOTAL[D$,N,X0,Y0]
  757.    If D$="+" or N>0
  758.       U=N mod 10 : N=(N-U)/10
  759.       If N>0
  760.          D=N mod 10 : N=(N-D)/10
  761.          If N>0
  762.             C=N mod 10
  763.          End If 
  764.       End If 
  765.       Paste Icon X0-DC,Y0,27+C : Wait Vbl 
  766.       Paste Icon X0+13-DC,Y0,27+D : Wait Vbl 
  767.       Paste Icon X0+26-DC,Y0,27+U : Wait Vbl 
  768.    Else 
  769.       Paste Icon X0,Y0,26
  770.       Paste Icon X0+13,Y0,26
  771.       Paste Icon X0+26,Y0,26 : Paste Icon X0+26,Y0,26
  772.    End If 
  773. End Proc
  774. Procedure METPOINTS
  775.    APT1: Data 25,5
  776.    APT2: Data 14,5
  777.    APT3: Data 3,5
  778.    APT4: Data 25,16
  779.    APT5: Data 14,16
  780.    APT6: Data 3,16
  781.    APT7: Data 25,27
  782.    APT8: Data 14,27
  783.    APT9: Data 3,27
  784.    If PTS<0 Then APTS=0 : Pop Proc
  785.    If PTS>APTS
  786.       For X=Max(1,APTS+1) To PTS
  787.          Restore "APT"+Str$(X)-" " : Read H,V : Paste Icon XP+H-DC,YP+V,1
  788.       Next 
  789.    Else 
  790.       For X=APTS To Max(PTS+1,1) Step -1
  791.          Restore "APT"+Str$(X)-" "
  792.          Read H,V : H=XP+H-DC : V=YP+V : AUTOBLOC[BOULBK,H,V]
  793.       Next 
  794.    End If 
  795.    APTS=PTS
  796. End Proc
  797. Procedure DESTROYPT
  798.    If PTS<0 Then Pop Proc
  799.    While FERMEDES : Wend : FERMEDES=True
  800.    BPT1: Data 25,5
  801.    BPT2: Data 14,5
  802.    BPT3: Data 3,5
  803.    BPT4: Data 25,16
  804.    BPT5: Data 14,16
  805.    BPT6: Data 3,16
  806.    BPT7: Data 25,27
  807.    BPT8: Data 14,27
  808.    BPT9: Data 3,27
  809.    BRUITB[4] : Restore "BPT"+Str$(PTS+1)-" " : Read H,V
  810.    B=BBOULE-1 : Dec BBOULE : If BBOULE=12 Then BBOULE=15
  811.    BL=B+20
  812.    DSP$="A 1,(R1,R0)(R1+1,R0)(R1+2,R0)(R1+3,R0)(R1+4,R0)(R1+5,R0)(R2,1)"
  813.    DSP$=DSP$+";M 0,100,62"
  814.    Channel B To Bob BL : Bob BL,XP+H-DC,YP+V,NBK+3 : Wait Vbl : Amal B,DSP$
  815.    Amreg(B,0)=10 : Amreg(B,1)=NBK+3 : Amreg(B,2)=NBK+16 : Amal On B
  816.    FERMEDES=False : DERBOULE=B
  817.    'While Chanmv(B) or Chanan(B) : Wend 
  818. End Proc
  819. Procedure DESTROYTOUT
  820.    Data 25,5,14,5,3,5,25,16,14,16,3,16,25,27,14,27,3,27
  821.    If APTS<1 Then Pop Proc
  822.    BRUIT[0,0,"perdu!"] : Bob Off : Bob Clear : Amal Off 
  823.    Restore : For P=1 To APTS : Read H,V
  824.    H(P)=XP+H-DC : V(P)=YP+V : AUTOBLOC[BOULBK,H(P),V(P)] : Next 
  825.    For P=1 To APTS : Bob P,H(P),V(P),NBK+3 : Wait Vbl : Next 
  826.    DSP$="A 1,(R1,R0)(R1+1,R0)(R1+2,R0)(R1+3,R0)(R1+4,R0)(R1+5,R0)(R1+13,1)"
  827.    DSP$=DSP$+";M 0,100,62"
  828.    For P=APTS To 1 Step -1
  829.       Channel P To Bob P : Bob P,H(P),V(P), : Wait Vbl 
  830.       Amal P,DSP$ : Amreg(P,0)=10 : Amreg(P,1)=NBK+3 : Amal On P
  831.    Next 
  832.    While Chanmv(1) or Chanan(1) : Wend : Wait Vbl : Wait 25
  833.    APTS=0 : PTS=0
  834. End Proc
  835. Procedure DROITE[E,D]
  836.    If Not(GAUCHE) Then Pop Proc
  837.    Amal Off : Wait Vbl 
  838.    Channel 1 To Screen Offset E : Screen E : Screen To Front E
  839.    Amal 1,"M 20,0,5;M R0,0,R1;M 20,0,5"
  840.    Amreg(1,0)=D : Amreg(1,1)=20 : If D<100 Then Amreg(1,1)=5
  841.    Amal On 1 : While Chanmv(1) : Wend : GAUCHE=False
  842. End Proc
  843. Procedure GAUCHE[E,D]
  844.    If GAUCHE Then Pop Proc
  845.    Amal Off : Wait Vbl 
  846.    Channel 1 To Screen Offset E : Screen E
  847.    Amal 1,"M -20,0,5 ;M R0,0,R1;M -20,0,5"
  848.    Amreg(1,0)=-D : Amreg(1,1)=20 : If D<100 Then Amreg(1,1)=5
  849.    Amal On 1 : While Chanmv(1) : Wend : GAUCHE=True
  850. End Proc
  851. Procedure DIAPHRAGME[A,B]
  852.    ' montre la moiti∩┐╜ gauche de B arrivant en diaphragme sur A
  853.    Autoback 0 : Screen To Front A
  854.    For X=1 To 59 Step 2
  855.       H0=170-X : H1=170+X : V0=128-X : V1=128+X
  856.       Screen Swap : Wait Vbl : Screen Copy B,H0,V0,H1,V1 To A,H0,V0
  857.    Next 
  858.    For X=60 To 130 Step 10
  859.       H0=170-X : H1=170+X : V0=128-X : V1=128+X
  860.       Screen Swap : Wait Vbl : Screen Copy B,H0,V0,H1,V1 To A,H0,V0
  861.    Next 
  862.    For X=131 To 176 Step 20
  863.       H0=170-X : H1=170+X : V0=0 : V1=260
  864.       Screen Swap : Wait Vbl : Screen Copy B,H0,V0,H1,V1 To A,H0,V0
  865.    Next 
  866.    Screen To Front B : Screen B : Rem Screen Close A 
  867. End Proc
  868. Procedure CLOCK[X,Y]
  869.    Change Mouse 3 : X Mouse=X : Y Mouse=Y : Show On 
  870. End Proc
  871. Procedure PASSECRAN[A$,E,F,G]
  872.    Screen Open 2,360,270,64,Lowres : Flash Off 
  873.    Get Palette E : Screen To Front E
  874.    Screen Copy E,0,0,360,270 To 2,0,0 : Screen Close E
  875.    Load Iff A$,F : Flash Off : Get Palette 2
  876.    Screen To Front 2 : Screen F
  877.    Colour 0,0 : Colour Back 0 : Wait Vbl : View 
  878.    If G=1 Then Screen Close 2 : Double Buffer 
  879. End Proc
  880. Procedure BANQBI[B$,I$]
  881.    CLOCK[280,60] : Amal Off : Bob Off : AJOUR : Erase 1 : Erase 2
  882.    If B$=""
  883.       NBK=0 : Load "BanqueB/BoulesC.abk"
  884.    Else 
  885.       Load "BanqueB/"+B$+".abk" : NBK=Length(1) : Load "BanqueB/BoulesC.abk",1
  886.    End If 
  887.    Load "BanqueI/Ftdb.abk" : NBI=Length(2)
  888.    If I$<>"" Then Load "BanqueI/"+I$+".abk",2
  889.    Make Icon Mask : Hide On 
  890. End Proc
  891. Procedure PREFERENCES[CHOIX]
  892.    PRFV: Data "voice","sounds","language","speed","music"
  893.    PRF1: Data 0,0,6,0,10,7,1,"voice"
  894.    PRF2: Data 1,0,69,0,73,7,2,"sounds"
  895.    PRF3: Data 1,1,37,15,41,21,3,"Language"
  896.    PRF4: Data 0,2,6,30,13,35,8,"speed"
  897.    PRF5: Data 1,2,69,30,74,35,9,"music"
  898.    DRAPEAUX: Data 3,4,6,0,11,5,0,0,0,0,0,0,7
  899.    DIALECTES: Data "Ang","Ang","All","Fra","Esp","Ita","","","","","","","Jap"
  900.    SUITE_D_OPTIONS: Data 2,3,4,5,6,13,4,4,4,4,4,4,1
  901.    CLOCK[300,150] : B$="A.PeTdbacc" : BANQBI[B$,""] : ZB=Length(1)+1 : TB=10
  902.    ECR=Screen : ZCR=4
  903.    Screen Open ZCR,112,66,64,Lowres : Flash Off 
  904.    Screen ZCR : Flash Off : Get Palette ECR : Cls 0
  905.    Screen To Front ECR : Screen ZCR : Paste Bob 0,0,TB : Wait Vbl 
  906.    For X=1 To 5 : Restore "PRF"+Str$(X)-" "
  907.       Read A,B,C,D,E,F,Z
  908.       If X=3
  909.          Restore DRAPEAUX : For XX=1 To PREF(3) : Read Z : Next 
  910.          If Z=0 : Z=NBK+16 : End If : Paste Bob E,F,Z
  911.       Else 
  912.          If PREF(X) : Paste Bob E,F,Z : End If 
  913.       End If 
  914.    Next : Get Bob ZCR,ZB,0,0 To 111,63 : Screen ECR
  915.    PARLE["Choose",2] : Hide On 
  916.    If CHOIX=0 : H=40 : V=73
  917.       For Z=1 To 64 Step 2
  918.          ZZ=Min(2*Z,112) : Get Bob ZCR,ZB,0,0 To ZZ,Z : Bob 1,H,V,ZB : Wait Vbl 
  919.       Next 
  920.    Else 
  921.       Bob 1,400,10,ZB : Wait Vbl 
  922.       If CHOIX=1
  923.          Limit Bob 1,0,0 To 224,200
  924.          Channel 1 To Bob 1 : Bob 1,222,120, : Wait Vbl 
  925.          Amal 1,"M -112,0,28" : Amal On 1 : While Chanmv(1) : Wend 
  926.          H=110 : V=120
  927.       Else 
  928.          Limit Bob 1,158,0 To 400,200
  929.          Channel 1 To Bob 1 : Bob 1,36,120, : Wait Vbl 
  930.          Amal 1,"M 112,0,28" : Amal On 1 : While Chanmv(1) : Wend 
  931.          H=148 : V=120
  932.       End If 
  933.    End If 
  934.    VIDCUR[0]
  935.    For X=1 To 5 : Restore "PRF"+Str$(X)-" "
  936.       Read A,B,C,D,E,F,Z : Add E,H : Add F,V
  937.       If X=3
  938.          Restore DRAPEAUX : For XX=1 To PREF(3) : Read Z : Next 
  939.          If Z=0 : Z=NBK+16 : End If : Bob X+1,E,F,Z
  940.       Else 
  941.          If PREF(X)
  942.             Bob X+1,E,F,Z
  943.          Else 
  944.             Bob X+1,E,F,NBK+16
  945.          End If : Wait Vbl 
  946.       End If 
  947.    Next : Bob 1,,,TB : Wait Vbl 
  948.    '
  949.    '
  950.    VIDCUR[0] : K=0
  951.    For X=1 To 5 : Restore "PRF"+Str$(X)-" "
  952.       Read A,B,C,D,E,F,Z,P$ : Add C,H : Add D,V
  953.       CUR(A,B,0)=C : CUR(A,B,1)=D : CUR(A,B,2)=X : Z(X)=Z
  954.       If K<1
  955.          Bob BCUR,CUR(A,B,0),CUR(A,B,1),NBK+17 : Wait Vbl : PARLE[P$,2]
  956.          TEMPS=Timer+50 : Repeat : K=Mouse Key : Until Timer>TEMPS or K>1
  957.       End If 
  958.    Next 
  959.    While Mouse Key : Wend 
  960.    HCR=1 : VCR=2 : INICURS[1,1] : L$=LANGUE$
  961.    Do 
  962.       CURSEUR[0] : If BOUTONB Then MZ=0 : BOUTONB=False
  963.       Exit If MZ=0 or Not(BOUTONS)
  964.       If MZ=3
  965.          Restore SUITE_D_OPTIONS : For X=1 To PREF(3) : Read PREF(3) : Next 
  966.          Restore DIALECTES : For X=1 To PREF(3) : Read LANGUE$ : Next 
  967.          Restore DRAPEAUX : For X=1 To PREF(3) : Read Z : Next 
  968.          If Z=0 : Z=NBK+16 : End If 
  969.          Bob MZ+1,,,Z : Wait Vbl 
  970.       Else 
  971.          If PREF(MZ)
  972.             Bob MZ+1,,,NBK+16 : PREF(MZ)=0
  973.          Else 
  974.             Bob MZ+1,,,Z(MZ) : PREF(MZ)=1
  975.          End If 
  976.       End If : Wait Vbl 
  977.       Restore PRFV : For X=1 To MZ : Read P$ : Next : PARLE[P$,2]
  978.       While Mouse Key : Wend 
  979.    Loop 
  980.    FINDEPREF:
  981.    AJOUR : BRUITB[100] : Amal Off 15 : Bob BCUR,,,NBK+16 : Wait Vbl 
  982.    CX=1 : CY=0
  983.    Screen ZCR : Paste Bob 0,0,TB
  984.    For X=1 To 5 : Restore "PRF"+Str$(X)-" "
  985.       Read A,B,C,D,E,F,Z
  986.       If X=3
  987.          Restore DRAPEAUX : For XX=1 To PREF(3) : Read Z : Next 
  988.          If Z=0 : Z=NBK+16 : End If : Paste Bob E,F,Z
  989.       Else 
  990.          If PREF(X) : Paste Bob E,F,Z : End If 
  991.       End If 
  992.    Next 
  993.    Get Bob ZCR,ZB,0,0 To 111,64 : Screen ECR : Bob 1,,,ZB : Wait Vbl 
  994.    For X=2 To 6 : Bob X,,,NBK+16 : Next 
  995.    If CHOIX=0 : Screen ZCR
  996.       For Z=64 To 1 Step -4
  997.          ZZ=Min(2*Z,112)
  998.          Get Bob ZCR,ZB,0,0 To ZZ,Z : Screen ECR : Bob 1,40,73,ZB : Wait Vbl 
  999.       Next 
  1000.       Bob 1,,,NBK+16 : Wait Vbl : Bob Off 1 : Wait Vbl 
  1001.    Else 
  1002.       Channel 1 To Bob 1 : Bob 1,,,Length(1) : Wait Vbl 
  1003.       If CHOIX=1
  1004.          Amal 1,"M 112,0,28" : Amal On 1 : While Chanmv(1) : Wend 
  1005.       Else 
  1006.          Amal 1,"M -112,0,28" : Amal On 1 : While Chanmv(1) : Wend 
  1007.       End If 
  1008.    End If : Screen Close ZCR
  1009.    Limit Bob : Amal Off : Bob Off : AJOUR : CLOCK[300,150]
  1010.    If L$<>LANGUE$
  1011.       If CHOIX=0
  1012.         A$="Decors/Entree"+LANGUE$ : PASSECRAN[A$,1,1,1]
  1013.       End If 
  1014.       If CHOIX=1
  1015.          Load "banqueI/Titror"+LANGUE$+".ABK" : Paste Icon 20,48,TEST
  1016.       End If 
  1017.    End If 
  1018.    BANQBI["",""]
  1019. End Proc
  1020. Procedure NETTOIE[BLK]
  1021.    Update : Wait Vbl : Update Off 
  1022.    Bob Clear : Put Cblock BLK : Bob Draw : Screen Swap : Wait Vbl 
  1023.    Bob Clear : Put Cblock BLK : Bob Draw : Screen Swap : Wait Vbl 
  1024.    Update On 
  1025. End Proc
  1026. Procedure AUTOBLOC[N,X,Y]
  1027.    Update : Update Off : Wait Vbl 
  1028.    Bob Clear : Put Block N,X,Y : Bob Draw : Screen Swap : Wait Vbl 
  1029.    Bob Clear : Put Block N,X,Y : Bob Draw : Screen Swap : Wait Vbl 
  1030.    Update On 
  1031. End Proc
  1032. Procedure ABLOC[N]
  1033.    Update : Update Off : Wait Vbl 
  1034.    Bob Clear : Put Block N : Bob Draw : Screen Swap : Wait Vbl 
  1035.    Bob Clear : Put Block N : Bob Draw : Screen Swap : Wait Vbl 
  1036.    Update On 
  1037. End Proc
  1038. Procedure AJOUR
  1039.    Update : Wait Vbl : Update : Wait Vbl 
  1040. End Proc
  1041. Procedure TIRE[M]
  1042.    If M=0 Then SA$="" : Pop Proc
  1043.    ' Tire un nombre parmi M et nouveau dans SA$     
  1044.    M=M-1 : Repeat : I=1+Rnd(M) : Until Instr(SA$,Str$(I)+" ")=0
  1045.    SA$=SA$+Str$(I)+" "
  1046. End Proc[I]
  1047. Procedure TIRB[M]
  1048.    If M=0 Then SB$="" : Pop Proc
  1049.    ' Tire un nombre parmi M et nouveau dans SB$     
  1050.    M=M-1 : Repeat : I=1+Rnd(M) : Until Instr(SB$,Str$(I)+" ")=0
  1051.    SB$=SB$+Str$(I)+" "
  1052. End Proc[I]
  1053. Procedure AFFECTE[DEB,NOMB,IMAGE]
  1054.    ' DEB : premier indice, NOMB : nombre total, premier compris 
  1055.    ' IMAGE: l'image ∩┐╜ affecter
  1056.    Repeat : N=DEB+Rnd(NOMB-1) : Until 0=ZBI(N) : ZBI(N)=IMAGE
  1057. End Proc[N]
  1058. Procedure VIDE
  1059.    Update : Bob Update Off : Wait Vbl 
  1060.    For N=1 To NB : Bob N,H(N),V(N),NBK+16 : Wait Vbl : Next 
  1061.    Update : Bob Update On 
  1062. End Proc
  1063. Procedure PLACE
  1064.    Update : Bob Update Off : Wait Vbl 
  1065.    For N=1 To NB : Bob N,H(N),V(N),ZBI(N) : Wait Vbl : Next 
  1066.    Update : Bob Update On 
  1067. End Proc
  1068. Procedure VOISTEST
  1069.    If(ETAPE>1) and(Screen=3)
  1070.       DROITE[3,45]
  1071.    Else 
  1072.       TPTS(TEST)=0 : METTOTAL["+",0,XT,YT] : DROITE[Screen,235] : DC=190
  1073.       S=Screen : Screen Open 3,450,270,64,Lowres : Flash Off : Get Palette S
  1074.       Screen To Front S : Screen Copy S,190,0,640,270 To 3,0,0
  1075.       Screen Offset 3,85,0 : Screen Close S : Double Buffer 
  1076.       Colour 0,0 : Colour Back 0 : Wait Vbl : View 
  1077.       Erase 7 : Reserve As Chip Work 7,65000
  1078.       A$="MRbruits/Brt4.sbk" : If Not(Exist(A$)) : A$="df0:Brt4.sbk" : End If 
  1079.       Load A$,7
  1080.    End If 
  1081. End Proc
  1082. Procedure POSEVAR
  1083.    Screen Open 7,32,10,16,Lowres : Flash Off : Screen Hide 7 : Screen 7
  1084.    For X=1 To 5 : Doke Phybase(0)+2*(X-1),PREF(X) : Next 
  1085.    For X=1 To 4 : Doke Phybase(0)+8+2*X,TPTS(X) : Next 
  1086. End Proc
  1087. Procedure PRENDVAR
  1088.    Screen Hide 7 : Screen 7
  1089.    For X=1 To 5 : PREF(X)=Deek(Phybase(0)+2*(X-1)) : Next 
  1090.    For X=1 To 4 : TPTS(X)=Deek(Phybase(0)+8+2*X) : Next 
  1091.    Data "Ang","Ang","All","Fra","Esp","Ita","","","","","","","Jap"
  1092.    Restore : For X=1 To PREF(3) : Read LANGUE$ : Next 
  1093.    Screen Close 7
  1094. End Proc
  1095. Procedure RETOUR
  1096.    Erase 1 : Erase 2 : Del Block : Del Cblock 
  1097.    S=Screen : Screen Open 2,360,270,64,Lowres : Flash Off 
  1098.    Get Palette S : Screen To Front S
  1099.    Screen Copy S,0,0,360,270 To 2,0,0 : Screen Close S
  1100.    CLOCK[280,60] : Load Iff "Decors/Entree"+LANGUE$,1
  1101.    Flash Off : Screen To Front 2
  1102.    Colour 0,0 : Colour Back 0 : Wait Vbl : View 
  1103.    Screen 2 : Autoback 0 : Screen To Front 2 : N=0 : D=2
  1104.    BRUIT[0,0,"antizoom"]
  1105.    For X=0 To 130 Step 1 : Repeat 
  1106.          H1=X : H2=X+D : H4=350-X : H3=H4-D
  1107.          V1=X : V2=X+D : V4=270-X : V3=V4-D
  1108.          Screen Copy 1,H1,V1,H4,V2 To 2,H1,V1
  1109.          Screen Copy 1,H3,V2,H4,V4 To 2,H3,V2
  1110.          Screen Copy 1,H1,V3,H3,V4 To 2,H1,V3
  1111.          Screen Copy 1,H1,V2,H2,V3 To 2,H1,V2
  1112.          Wait Vbl : Screen Swap : Inc N
  1113.    Until N>1 : Next 
  1114.    Screen Close 2
  1115.    Colour 0,0 : Colour Back 0 : Wait Vbl : View 
  1116.    POSEVAR : Screen 1 : A$="A48.amos" : If Exist("df0:"+A$) Then A$="DF0:"+A$
  1117.    Run A$
  1118. End Proc
  1119. '
  1120. Procedure XY
  1121.    X0=0 : Y0=0 : Change Mouse 1 : Show On : Limit Mouse 
  1122.    Repeat 
  1123.       X=X Screen(X Mouse) : Y=Y Screen(Y Mouse)
  1124.       If X<>X0 or Y<>Y0
  1125.          Locate 35,1 : Print X;"  " : Locate 35,2 : Print Y;"  "
  1126.          X0=X : Y0=Y
  1127.       End If 
  1128.       K$=Inkey$ : Exit If K$<>""
  1129.    Until Mouse Key
  1130. End Proc
  1131. Procedure VOIR
  1132.    Pop Proc
  1133.    Pen 21 : Locate 35,1 : Print X
  1134.    Shoot : Do : Loop 
  1135. End Proc